home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / exampleCode / GLX / cutNpaste / Motif+Xt / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  5.7 KB  |  239 lines

  1. /*
  2.  * Copyright 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. /*
  18.  *
  19.  */
  20.  
  21. #include <stdio.h>
  22. #include <X11/Intrinsic.h>
  23. #include <X11/StringDefs.h>
  24. #include <X11/keysym.h>
  25. #include <Xm/MainW.h>
  26. #include <Xm/RowColumn.h>
  27. #include <Xm/PushB.h>
  28. #include <Xm/CascadeB.h>
  29. #include <Xm/Frame.h>
  30. #include <Xm/FileSB.h>
  31. #include <X11/Xirisw/GlxMDraw.h>
  32. #include <gl/gl.h>
  33.  
  34. /* Callbacks */
  35. static void okCB(), cancelCB(), openCB(); 
  36. extern void cutCB(), copyCB(), pasteCB(), quitCB();
  37. static Widget createMenuBar(); 
  38.  
  39. static unsigned long background;
  40. extern unsigned long WidgetBackgroundToGlRgb();
  41. extern Widget create_mol_widget();
  42.  
  43. Widget molw;
  44.  
  45. XtAppContext app_context;
  46. static String fallback_resources[] = {
  47.     "*frame*shadowType: SHADOW_IN",
  48.     "*mol*width: 400",
  49.     "*mol*height: 400",
  50.     NULL
  51.     };
  52.  
  53. Matrix objmat = {
  54.     {1.0, 0.0, 0.0, 0.0},
  55.     {0.0, 1.0, 0.0, 0.0},
  56.     {0.0, 0.0, 1.0, 0.0},
  57.     {0.0, 0.0, 0.0, 1.0},
  58. };
  59.  
  60. Matrix idmat = {
  61.     {1.0, 0.0, 0.0, 0.0},
  62.     {0.0, 1.0, 0.0, 0.0},
  63.     {0.0, 0.0, 1.0, 0.0},
  64.     {0.0, 0.0, 0.0, 1.0},
  65. };
  66.  
  67.  
  68. /* Modes the program can be in */
  69. #define NOTHING 0
  70. #define ORIENT 1
  71. #define SPIN 2
  72.  
  73. int mode = 0;
  74. int omx, mx, omy, my;    /* old and new mouse position */
  75.  
  76. static void
  77. openCB(Widget parent, caddr_t client_data, caddr_t call_data)
  78. {
  79.      Widget fsb;
  80.     Widget ok;
  81.     Widget button;
  82.     Arg args[20];
  83.     int n;
  84.  
  85.     n=0;
  86.     XtSetArg (args[n], XmNdirMask, 
  87.         XmStringCreate("*.mol",XmSTRING_DEFAULT_CHARSET)); n++;
  88.     fsb = XmCreateFileSelectionDialog(parent, "fsb", args, n);
  89.     XtSetValues (fsb, args, n); 
  90.  
  91.  
  92.  
  93. /* buttons are OK, FILTER, CANCEL */
  94.     button = XmFileSelectionBoxGetChild(fsb, XmDIALOG_CANCEL_BUTTON);
  95.     XtAddCallback(button, XmNactivateCallback, cancelCB, 0);
  96.  
  97.     ok = XmFileSelectionBoxGetChild(fsb, XmDIALOG_OK_BUTTON);
  98.     XtAddCallback(ok, XmNactivateCallback, okCB, 0);
  99.  
  100.     button = XmFileSelectionBoxGetChild(fsb, XmDIALOG_HELP_BUTTON);
  101.     XtUnmanageChild(button);
  102.  
  103.     XtManageChild(fsb);
  104. }
  105.  
  106. static void
  107. okCB(Widget w, caddr_t client_data, caddr_t call_data)
  108. {
  109.     Widget message_box = XtParent (w);
  110.     Widget shell = XtParent (message_box);
  111.  
  112.     char *XmTextGetString();
  113.     Widget textwidget =
  114.             XmFileSelectionBoxGetChild(message_box, XmDIALOG_TEXT);
  115.     char *filename = XmTextGetString(textwidget);
  116.     
  117.     fprintf(stderr,"file: %s\n",filename);
  118.  
  119.         openFile(filename);
  120.         exposeCB(molw, 0, 0);
  121.  
  122.     if (filename)
  123.         XtFree(filename);
  124.  
  125.     XtUnmanageChild (message_box);
  126.     XtDestroyWidget(shell);
  127. }
  128.  
  129. static void
  130. cancelCB(Widget w, caddr_t client_data, caddr_t call_data)
  131. {
  132.     Widget message_box = XtParent (w);
  133.     Widget shell = XtParent (message_box);
  134.  
  135.     XtUnmanageChild (message_box);
  136.     XtDestroyWidget(shell);
  137.  
  138. }
  139.  
  140.  
  141. main(argc, argv)
  142.          unsigned int argc;
  143.          char **argv;
  144. {
  145.  
  146.  
  147.     Arg args[20];
  148.     int n;
  149.     Widget glw, toplevel, mainw, frame, menu_bar;
  150.  
  151.     toplevel = XtAppInitialize(&app_context, "cutp",
  152.                    (XrmOptionDescList)NULL , 0,
  153.                    (Cardinal*)&argc,
  154.                    (String*)argv,
  155.                    fallback_resources,
  156.                    (ArgList)NULL, 0);
  157.  
  158.     n = 0;
  159.     mainw = XmCreateMainWindow(toplevel, "mainw", args, n);
  160.     XtManageChild(mainw);
  161.  
  162.     menu_bar = createMenuBar(mainw);
  163.     n = 0;
  164.     frame = XmCreateFrame (mainw, "frame", args, n);
  165.     XtManageChild (frame);
  166.  
  167.     molw = create_mol_widget(frame);
  168.  
  169.     XmMainWindowSetAreas( mainw, menu_bar, NULL, NULL, NULL, frame);
  170.  
  171.     XtRealizeWidget(toplevel);
  172.  
  173. /*
  174.     installColormap(toplevel,glw);
  175. */
  176.  
  177.     XtAppMainLoop(app_context);
  178. }
  179.  
  180. static Widget
  181. createMenuBar(parent)
  182. Widget parent;
  183. {
  184.     Widget menu_bar;
  185.     Widget cascade;
  186.     Widget menu_pane;
  187.     Widget button;
  188.     Arg args[10];
  189.     register int n;
  190.  
  191.     n = 0;
  192.     menu_bar = XmCreateMenuBar(parent, "menu_bar", args, n);
  193.     XtManageChild (menu_bar);
  194.  
  195.     n = 0;
  196.     menu_pane = XmCreatePulldownMenu (menu_bar, "menu_pane", args, n);
  197.  
  198.     n = 0;
  199.     button = XmCreatePushButton (menu_pane, "Open", args, n);
  200.     XtManageChild (button);
  201.     XtAddCallback (button, XmNactivateCallback, openCB, NULL);
  202.  
  203.     n = 0;
  204.     button = XmCreatePushButton (menu_pane, "Quit", args, n);
  205.     XtManageChild (button);
  206.     XtAddCallback (button, XmNactivateCallback, quitCB, NULL);
  207.  
  208.     n = 0;
  209.     XtSetArg (args[n], XmNsubMenuId, menu_pane); n++;
  210.     cascade = XmCreateCascadeButton (menu_bar, "File", args, n);
  211.     XtManageChild (cascade);
  212.  
  213.     n = 0;
  214.     menu_pane = XmCreatePulldownMenu (menu_bar, "menu_pane", args, n);
  215.  
  216.     n = 0;
  217.     button = XmCreatePushButton (menu_pane, "Cut", args, n);
  218.     XtManageChild (button);
  219.     XtAddCallback (button, XmNactivateCallback, cutCB, NULL);
  220.  
  221.     n = 0;
  222.     button = XmCreatePushButton (menu_pane, "Copy", args, n);
  223.     XtManageChild (button);
  224.     XtAddCallback (button, XmNactivateCallback, copyCB, NULL);
  225.  
  226.     n = 0;
  227.     button = XmCreatePushButton (menu_pane, "Paste", args, n);
  228.     XtManageChild (button);
  229.     XtAddCallback (button, XmNactivateCallback, pasteCB, NULL);
  230.  
  231.     n = 0;
  232.     XtSetArg (args[n], XmNsubMenuId, menu_pane); n++;
  233.     cascade = XmCreateCascadeButton (menu_bar, "Edit", args, n);
  234.     XtManageChild (cascade);
  235.  
  236.     return (menu_bar);
  237. }
  238.  
  239.